package com.weixin.dao;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import com.weixin.vo.Admin;
import com.weixin.vo.AdminEdit;
import com.weixin.vo.AdminList;
import com.weixin.vo.Bank;
import com.weixin.vo.Goods;
import com.weixin.vo.GoodsType;
import com.weixin.vo.MemberEdit;
import com.weixin.vo.MemberList;
import com.weixin.vo.MemberType;
import com.weixin.vo.Role;
import com.weixin.vo.XiaoLiang;

/**
 * 后台管理与数据库的链接层
 * @author 唐鑫明
 *
 */
public interface IBackstageDao {
	/**
	 * 查询所有的会员信息
	 * 数据表：user_table
	 * @return 返回一个装有会员信息的List集合
	 * @throws SQLException 抛出的异常
	 */
	public List<MemberEdit> selectAllMember()throws SQLException;
	/**
	 * 根据会员姓名查找对应对应的会员信息
	 * 数据库表:user_table,bank_table,role_table,state_table,acti_table,type_table
	 * @param user_name 会员姓名
	 * @param pageNum 第几页
	 * @param pageSize 每页大小
	 * @return 返回装有会员信息的集合
	 * @throws SQLException 抛出的异常
	 */
	public List<MemberList> selectMemberInfo(String user_name,int pageNum,int pageSize) throws SQLException;
	/**
	 * 查询一共有多少条会员数据
	 * 数据库表:user_table
	 * @param user_name 会员名
	 * @return 会员数据的条数
	 * @throws SQLException 抛出的异常
	 */
	public long selectMemberCount(String user_name) throws SQLException;
	/**
	 * 根据会员ID修改此会员的状态(启用/禁止)
	 * 数据表:user_table
	 * @param user_id 会员ID
	 * @param state_id 状态ID
	 * @return 修改成功返回true,修改失败返回false
	 * @throws SQLException 抛出的异常
	 */
	public boolean editMemberState(int user_id,int state_id) throws SQLException;
	/**
	 * 根据会员ID查找对应的会员信息
	 * 数据表:user_table,bank_table,role_table,state_table,acti_table,type_table
	 * @param user_id 会员ID
	 * @return 返回会员信息
	 * @throws SQLException 抛出的异常
	 */
	public MemberList selectMemberById(int user_id)throws SQLException;
	/**
	 * 根据状态(启用/禁止)名查找对应的状态ID
	 * 数据表:state_table
	 * @param state_name 状态名 
	 * @return 状态ID
	 * @throws SQLException  抛出的异常
	 */
	public int selectStateIdByName(String state_name)throws SQLException;
	/**
	 * 查询银行信息
	 * 数据表:bank_table
	 * @return 返回一个装有银行信息的list集合
	 * @throws SQLException 抛出的异常
	 */
	public List<Bank> selectBankInfo() throws SQLException;
	/**
	 * 查询会员类型信息
	 * 数据表:type_table
	 * @return 返回一个装有类型信息的list结合
	 * @throws SQLException 抛出的异常
	 */
	public List<MemberType> selectTypeInfo()throws SQLException;
	/**
	 * 添加会员
	 * 数据表:user-table
	 * @param memberEdit 新添加的会员
	 * @return 添加成功返回true,否则返回false
	 * @throws SQLException 抛出的异常
	 */
	public boolean addMember(MemberEdit memberEdit)throws SQLException;
	/**
	 * 修改会员信息
	 * 数据表:user_table
	 * @param mEdit  修改后的会员信息
	 * @param user_id 要修改的会员ID
	 * @return 修改成功返回true,修改失败返回false
	 * @throws SQLException 抛出的异常
	 */
	public boolean editMember(MemberEdit mEdit,int user_id)throws SQLException;
	/**
	 * 根据会员ID删除用户(删除单个会员)
	 * 数据表:user_table
	 * @param user_id 会员ID 
	 * @return 删除成功返回true,删除失败返回false
	 * @throws SQLException 抛出的异常
	 */
	public boolean deleteMember(int user_id)throws SQLException;
	/**
	 * 根据会员ID删除用户(删除多个会员)
	 * 数据表:user_table
	 * @param user_ids 会员ID
	 * @return 删除成功返回true,删除失败返回false
	 * @throws SQLException 抛出的异常
	 */
	public boolean deleteSelectMember(String[] user_ids)throws SQLException;
	/**
	 * 初始化单个会员的密码
	 * 数据表:user_table
	 * @param user_id 会员ID
	 * @return 密码初始化成功返回true,初始化失败返回false
	 * @throws SQLException 抛出的异常
	 */
	public boolean resetMemberPass(int user_id)throws SQLException;
	/**
	 * 初始化多个会员的密码
	 * 数据表:user_table
	 * @param user_ids 会员ID
	 * @return 密码初始化成功返回true,初始化失败返回false
	 * @throws SQLException SQLException 抛出的异常
	 */
	public boolean resetSelectMemberPass(String[] user_ids)throws SQLException;
	/**
	 * 查询管理员信息
	 * 数据表:admin_table,role_table,state_table
	 * @param admin_name 管理员名
	 * @param pageNum 第几页
	 * @param pageSize 每页大小
	 * @return 返回一个装有admin信息的List集合
	 * @throws SQLException 抛出的异常
	 */
	public List<AdminList> selectAdminInfo(String admin_name,int pageNum,int pageSize)throws SQLException;
	/**
	 * 查询一共有多少个管理员
	 * 数据表:admin_table
	 * @param admin_name
	 * @return 管理员的人数
	 * @throws SQLException 抛出的异常
	 */
	public long selectAdminCount(String admin_name)throws SQLException;
	/**
	 * 修改管理员的状态(启用/禁用)
	 * 数据表:admin_table
	 * @param admin_id 管理员的ID
	 * @param state_id 状态ID
	 * @return 修改成功返回true,否则返回false
	 * @throws SQLException 抛出的异常
	 */
	public boolean editAdminState(int admin_id,int state_id)throws SQLException;
	/**
	 * 新增管理员
	 * 数据表 admin_table
	 * @param aEdit 新增会员信息
	 * @return 增加成功返回true，否则返回false
	 * @throws SQLException 抛出的异常
	 */
	public boolean addAdmin(AdminEdit aEdit)throws SQLException;
	/**
	 * 查询角色信息
	 * 数据表:role_table
	 * @return 返回一个装有角色信息的集合
	 * @throws SQLException 抛出的异常
	 */
	public List<Role> selectRole()throws SQLException;
	/**
	 * 根据管理员ID查询对应的管理员信息
	 * 数据表:admin_table,role_table,state_table
	 * @param admin_id 管理员ID
	 * @return 返回查询到的管理员信息
	 * @throws SQLException 抛出的异常
	 */
	public AdminList selectAdminById(int admin_id)throws SQLException;
	/**
	 * 根据编号修改管理员信息
	 * 数据表:admin_table
	 * @param aEdit 管理员信息
	 * @return 修改成功返回true，否则返回false
	 * @throws SQLException 抛出的异常
	 */
	public boolean editAdmin(AdminEdit aEdit)throws SQLException;
	/**
	 * 查询管理员信息
	 * 数据表:admin_table
	 * @return 返回一个装有管理员信息的list集合
	 * @throws SQLException 抛出的异常
	 */
	public List<AdminEdit> selectAdminInfo()throws SQLException;
	/**
	 * 根据管理员ID删除对应的管理员信息
	 * 数据表:admin_table
	 * @param admin_id 管理员ID
	 * @return 删除成功返回true,删除失败返回false
	 * @throws SQLException 抛出的异常
	 */
	public boolean deleteAdmin(int admin_id)throws SQLException; 
	/**
	 * 删除选中的管理员
	 * 数据表:admin_table
	 * @param admin_ids 选中管理员的ID
	 * @return 删除成功返回true,否则返回false
	 * @throws SQLException 抛出的异常
	 */
	public boolean deleteSelectAdmin(String[] admin_ids)throws SQLException;
	/**
	 * 根据ID初始化管理的密码
	 * 数据表:admin_table
	 * @param admin_id 管理员ID
	 * @return 初始化成功返回true,否则返回false
	 * @throws SQLException 抛出的异常
	 */
	public boolean resetAdminPass(int admin_id)throws SQLException;
	/**
	 * 初始化选中管理员的密码
	 * 数据表:admin_table
	 * @param admin_ids 选中的管理员ID
	 * @return 初始化成功返回true,否则返回false
	 * @throws SQLException 抛出的异常
	 */
	public boolean resetSeletAdminPass(String[] admin_ids)throws SQLException;
	/**
	 * 查找商品信息
	 * 数据表:goods_table,state_table,type_table,goodstype_table
	 * @param goods_name 商品名
	 * @param goods_id 商品ID
	 * @param pageNum 第几页
	 * @param pageSize 每页大小
	 * @param gtype_id 商品类型
	 * @return 返回一个装有商品信息的list集合
	 * @throws SQLException 抛出的异常
	 */
	public List<Goods> selectGoodsInfo(String goods_name,String goods_id,int pageNum,int pageSize,int gtype_id)throws SQLException;
	/**
	 * 查询商品数量
	 * 数据表:goods_table
	 * @param goods_id 商品ID
	 * @param goods_name 商品名
	 * @param gtype_id 商品类型 
	 * @return 返回商品的数量
	 * @throws SQLException 抛出的异常
	 */
	public long selectGoodsCount(String goods_id,String goods_name,int gtype_id)throws SQLException;
	/**
	 * 查询商品类型
	 * 数据表:goodstype_table
	 * @return 返回一个装有商品类型的list集合
	 * @throws SQLException 抛出的异常
	 */
	public List<GoodsType> selectGoodsType()throws SQLException;
	/**
	 * 修改商品的状态(上架/下架)
	 * 数据表:goods_table
	 * @param goods_id 商品ID
	 * @param state_id 状态ID
	 * @return 修改成功返回true,否则返回false
	 * @throws SQLException 抛出的异常
	 */
	public boolean editGoodsState(int goods_id,int state_id)throws SQLException;
	/**
	 * 查询商品的销量
	 * 数据表:goods_table,sales_table
	 * @param gtype_id 商品种类ID
	 * @return 
	 * @throws SQLException
	 */
	public List<Map<String,Object>> selectGoodsSales(int gtype_id)throws SQLException;
	/**
	 * 根据商品ID查找对应的商品信息
	 * 数据表:goods_table
	 * @param goods_id 商品ID
	 * @return 返回查找到的商品信息
	 * @throws SQLException 抛出的异常
	 */
	public Goods selectGoodsById(int goods_id)throws SQLException;
	/**
	 * 根据商品编号删除对应的商品信息
	 * 数据表:goods_table
	 * @param goods_id 商品ID
	 * @return 删除成功返回true,删除失败返回false
	 * @throws SQLException 抛出的异常
	 */
	public boolean deleteGoodsById(int goods_id)throws SQLException;
	/**
	 * 删除选中的商品
	 * 数据表:goods_table
	 * @param goods_ids 选中的商品编号
	 * @return 删除成功返回true,删除失败返回false 
	 * @throws SQLException 抛出的异常
	 */
	public boolean deleteSelecedGoods(String[] goods_ids)throws SQLException;
	/**
	 * 查询的所有商品的总年销量
	 * 数据表:goods_table,sales_table
	 * @return 返回总年销量
	 * @throws SQLException 抛出的异常
	 */
	public int selectTotalGoodsSales()throws SQLException;
	/**
	 * 查询的所有商品的总年收入
	 * 数据表:goods_table,sales_table
	 * @return 返回总年收入
	 * @throws SQLException 抛出的异常
	 */
	public double selectTotalGoodsPrice()throws SQLException;
	/**
	 * 查询销量最高的商品编号，名称，以及年销量
	 * 数据表:goods_table,sales_table
	 * @return 返回销量最高的商品
	 * @throws SQLException 抛出的异常
	 */
	public XiaoLiang selectMaxGoodsSales()throws SQLException;
	/**
	 * 查询销量第二的商品编号，名称，以及年销量
	 * 数据表:goods_table,sales_table
	 * @return 返回销量第二的商品
	 * @throws SQLException 抛出的异常
	 */
	public XiaoLiang selectSecondGoodsSales()throws SQLException;
	/**
	 * 查询销量第三的商品编号，名称，以及年销量
	 * 数据表:goods_table,sales_table
	 * @return 返回销量第三的商品
	 * @throws SQLException 抛出的异常
	 */
	public XiaoLiang selectThirdGoodsSales()throws SQLException;
	/**
	 * 查询销量第四的商品编号，名称，以及年销量
	 * 数据表:goods_table,sales_table
	 * @return 返回销量第四的商品
	 * @throws SQLException 抛出的异常
	 */
	public XiaoLiang selectFourthGoodsSales()throws SQLException;
	/**
	 * 根据商品编号查询销量排名前四的商品的信息
	 * 数据表:goods_table,sales_table
	 * @param goods_id1 销量第一的商品ID
	 * @param goods_id2 销量第二的商品ID
	 * @param goods_id3 销量第三的商品ID
	 * @param goods_id4 销量第四的商品ID
	 * @return 返回商品信息
	 * @throws SQLException 抛出的异常
	 */
	public List<Map<String, Object>> selectGoodsSalesGoodsEchars(int goods_id1,int goods_id2,int goods_id3,int goods_id4)throws SQLException;
	/**
	 * 修改商品信息
	 * 数据表:goods_table
	 * @param goods 要修改的商品信息
	 * @return 修改成功返回true,修改失败返回false
	 * @throws SQLException 抛出的异常
	 */
	public boolean editGoodsInfo(Goods goods)throws SQLException;
	/**
	 * 添加商品
	 * 数据表:goods_table
	 * @param goods 要添加的商品信息 
	 * @return 添加成功返回true，添加失败返回false
	 * @throws SQLException 抛出的异常
	 */
	public boolean addGoods(Goods goods)throws SQLException;
	/**
	 * 根据账号查找数据库中是否存在相同账号的用户
	 * 数据表:admin_table
	 * @param admin_account 账号
	 * @return 返回admin
	 * @throws SQLException 抛出的异常
	 */
	public Admin selectAdminByAccount(String admin_account)throws SQLException;
	/**
	 * 在数据库中查找是否存在该商品
	 * 数据表:goods_table
	 * @param goods_id 商品ID
	 * @return 返回goods
	 * @throws SQLException 抛出的异常
	 */
	public Goods checkGoods(int goods_id)throws SQLException;
	
}
